{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "c63de343-cabb-4198-ae97-b23cdf2ae9e7",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "# Creating a Molecule's Potential Energy Curve\n",
    "\n",
    "A potential energy curve gives the ground energy of an assemble of atoms as function of the distances between them. The global minima of the curve indicates the binding energy and internuclear distance for the stable molecule. Therefor, such curve can be powerful tool in computational chemistry, for predicting molecular structure and spectrum.\n",
    "\n",
    "In this tutorial, we will demonstrate how, using Classiq's VQE package, the user can create a Molecule's potential energy curve, and compare the result those of the Hartree-Fock approximative method and to the exact results. The exact solution is a result of diagonalizing the Hamiltonian."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "099a3eaa-aec8-4088-89cc-b7fb9fcf161c",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "## 0. Pre-requirments\n",
    "\n",
    "The model is using several Classiq's libraries in addition to IBM's simulating tool."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "02f49a11",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-05-07T15:14:17.533288Z",
     "iopub.status.busy": "2024-05-07T15:14:17.532350Z",
     "iopub.status.idle": "2024-05-07T15:14:20.443573Z",
     "shell.execute_reply": "2024-05-07T15:14:20.442890Z"
    }
   },
   "outputs": [],
   "source": [
    "import time\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "from classiq import construct_chemistry_model, execute, show, synthesize\n",
    "from classiq.applications.chemistry import (\n",
    "    ChemistryExecutionParameters,\n",
    "    HEAParameters,\n",
    "    Molecule,\n",
    "    MoleculeProblem,\n",
    "    UCCParameters,\n",
    ")\n",
    "from classiq.execution import OptimizerType"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b385d28a-efbf-41ae-b542-ed97ed6780b3",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "## 1. Defintions and Initialization\n",
    "\n",
    "Here, we define the range of internuclear distances for the model to simulate, and chose the number of sampling point in this range, which determines the graph's resolution."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "238c6d3c-2ab7-4033-94c3-917debd90b17",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-05-07T15:14:20.447086Z",
     "iopub.status.busy": "2024-05-07T15:14:20.446361Z",
     "iopub.status.idle": "2024-05-07T15:14:20.451781Z",
     "shell.execute_reply": "2024-05-07T15:14:20.451128Z"
    },
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.2  0.4  0.6  0.8  1.   1.4  1.75 2.1  2.45 2.8  3.15 3.5 ]\n"
     ]
    }
   ],
   "source": [
    "# define the sampling params\n",
    "num1 = 5  # how many sampling points - determines your resolution\n",
    "start1 = 0.20  # what is your sampling start distance\n",
    "stop1 = 1  # what is your sampling end distance\n",
    "num2 = 7  # how many sampling points - determines your resolution\n",
    "start2 = 1.4  # what is your sampling start distance\n",
    "stop2 = 3.5  # what is your sampling end distance\n",
    "\n",
    "\n",
    "# prepare x,y vectors\n",
    "distance = np.append(np.linspace(start1, stop1, num1), np.linspace(start2, stop2, num2))\n",
    "VQE_energy = []\n",
    "HF_energy = []\n",
    "exact_energy = []\n",
    "\n",
    "print(distance)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e482b279-dfda-46b6-be32-0bce69fb52d6",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "## 2. Energy Estimations\n",
    "\n",
    "Here we define a for-loop, which does the following steps:\n",
    "\n",
    "a. creating molecule at changing distances between the atoms.\n",
    "\n",
    "b. Constructing a chemistry model for the corresponding Hamiltonian, using Hartree-Fock initial state and UCC ansatz.\n",
    "\n",
    "c. Synthesizing the model to get a quantum program.\n",
    "\n",
    "d. Executing the quantum program to extract a solution for the ground energy.\n",
    "\n",
    "e. Obtain the exact solution and Hartree-Fock solution."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "b25f416a",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-05-07T15:14:20.454446Z",
     "iopub.status.busy": "2024-05-07T15:14:20.454046Z",
     "iopub.status.idle": "2024-05-07T15:16:31.137135Z",
     "shell.execute_reply": "2024-05-07T15:16:31.135771Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "11.811192989349365\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10.764894247055054\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "9.940804243087769\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10.691434860229492\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "11.07170820236206\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "9.649993658065796\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "11.017099618911743\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10.790261507034302\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "9.763712167739868\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "9.770148515701294\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "9.85509705543518\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "15.547704696655273\n"
     ]
    }
   ],
   "source": [
    "# create the molecule, insert the distance, prepare H, create UCC anzats and solve in energy\n",
    "for x in distance:\n",
    "    time1 = time.time()\n",
    "\n",
    "    molecule = Molecule(atoms=[(\"H\", (0.0, 0.0, 0)), (\"H\", (0.0, 0.0, float(x)))])\n",
    "\n",
    "    chemistry_problem = MoleculeProblem(\n",
    "        molecule=molecule,\n",
    "        mapping=\"jordan_wigner\",  # 'bravyi_kitaev'\n",
    "        z2_symmetries=True,\n",
    "        freeze_core=True,\n",
    "    )\n",
    "\n",
    "    qmod = construct_chemistry_model(\n",
    "        chemistry_problem=chemistry_problem,\n",
    "        use_hartree_fock=True,\n",
    "        ansatz_parameters=UCCParameters(excitations=[1, 2]),\n",
    "        execution_parameters=ChemistryExecutionParameters(\n",
    "            optimizer=OptimizerType.COBYLA,\n",
    "            max_iteration=30,\n",
    "            initial_point=None,\n",
    "        ),\n",
    "    )\n",
    "\n",
    "    qprog = synthesize(qmod)\n",
    "\n",
    "    result = execute(qprog).result()\n",
    "    chemistry_result_dict = result[1].value\n",
    "\n",
    "    operator = chemistry_problem.generate_hamiltonian()\n",
    "    mat = operator.to_matrix()\n",
    "    w, v = np.linalg.eig(mat)\n",
    "    result_exact = np.real(min(w)) + chemistry_result_dict[\"nuclear_repulsion_energy\"]\n",
    "\n",
    "    VQE_energy.append(chemistry_result_dict[\"total_energy\"])\n",
    "\n",
    "    HF_energy.append(chemistry_result_dict[\"hartree_fock_energy\"])\n",
    "\n",
    "    exact_energy.append(result_exact)\n",
    "\n",
    "    time2 = time.time()\n",
    "    print(time2 - time1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "814b6501-6437-4fb8-96a9-4318b0ff54ea",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-05-07T15:16:31.141831Z",
     "iopub.status.busy": "2024-05-07T15:16:31.140596Z",
     "iopub.status.idle": "2024-05-07T15:16:31.165876Z",
     "shell.execute_reply": "2024-05-07T15:16:31.165172Z"
    }
   },
   "outputs": [],
   "source": [
    "# save the last model to a qmod file\n",
    "from classiq import write_qmod\n",
    "\n",
    "write_qmod(qmod, name=\"molecular_energy_curve\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "442ddc89",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "## 3. Create Graph"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "1f657c3d",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2024-05-07T15:16:31.170903Z",
     "iopub.status.busy": "2024-05-07T15:16:31.169716Z",
     "iopub.status.idle": "2024-05-07T15:16:31.470370Z",
     "shell.execute_reply": "2024-05-07T15:16:31.469630Z"
    },
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(\n",
    "    distance, VQE_energy, \"r--\", distance, HF_energy, \"bs\", distance, exact_energy, \"g^\"\n",
    ")\n",
    "\n",
    "plt.xlabel(\"distance [\u00c5]\")\n",
    "plt.ylabel(\"energy [Ha]\")\n",
    "plt.legend([\"Classiq VQE\", \"Hartree-Fock\", \"Exact solution\"])\n",
    "plt.title(\"Binding Curve H_{2}\")\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6886a471",
   "metadata": {
    "pycharm": {
     "name": "#%% md\n"
    }
   },
   "source": [
    "This graph presents the ground state for $H_{2}$ molecule as a function of the distance between the two hydrogen atoms. One can see that both the HF solution and Classiq VQE present decent results around the global minima. For further distances, Classiq VQE stays close to the exact solution while the HF solution gradually deviates. The source of this lack of correspondence is with the lack of flexible correlations within the HF model, which is enabled within VQE scope.\n",
    "One can similarly create graphs for different molecules (even n- dimensional or larger atom assemblies), to explore more curves.\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
